/* Copyright (c) 2001, Nokia. All rights reserved */

#ifndef __TIMEOUTTIMER_H__
#define __TIMEOUTTIMER_H__

#include <e32base.h>

class MTimeOutNotifier;

/*! 
 @class CTimeOutTimer
 
 @discussion This class will notify an object after a specified timeout.
 */
class CTimeOutTimer : public CTimer
	{
public:
	/*!
	 @function NewL
	 
	 @discussion Create a CTimeOutTimer object
	 @param aPriority priority to use for this timer
	 @param aTimeOutNotify object to notify of timeout event
	 @result a pointer to the created instance of CTimeOutTimer
	 */
	static CTimeOutTimer* NewL(const TInt aPriority,
			MTimeOutNotifier& aTimeOutNotify);

	/*!
	 @function NewL
	 
	 @discussion Create a CTimeOutTimer object
	 @param aPriority priority to use for this timer
	 @param aTimeOutNotify object to notify of timeout event
	 @result a pointer to the created instance of CTimeOutTimer
	 */
	static CTimeOutTimer* NewLC(const TInt aPriority,
			MTimeOutNotifier& aTimeOutNotify);

	/*!
	 @function ~CTimeOutTimer
	 
	 @discussion Destroy the object and release all memory objects
	 */
	~CTimeOutTimer();

protected:
	// From CTimer
	/*!
	 @function RunL
	 @discussion Invoked when a timeout occurs
	 */
	virtual void RunL();

private:
	/*!
	 @function CTimeOutTimer
	 
	 @discussion Perform the first phase of two phase construction 
	 @param aPriority priority to use for this timer
	 @param aTimeOutNotify An observer to notify
	 */
	CTimeOutTimer(const TInt aPriority, MTimeOutNotifier& aTimeOutNotify);

	/*!
	 @function ConstructL
	 
	 @discussion Perform the second phase construction of a CTimeOutTimer 
	 */
	void ConstructL();

private:
	// Member variables

	/*! @var The observer for this objects events */
	MTimeOutNotifier& iNotify;
	};

#endif // __TIMEOUTTIMER_H__
